home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / listing.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-07-27  |  3.8 KB  |  58 lines

  1. 10  ON ERROR GOTO 0:SCREEN 0:KEY OFF:CLS:DEFINT A-Z:DIM PREFER$(20)
  2. 20  COLOR 0,7:PRINT STRING$(240,32):LOCATE 1,1:PRINT TAB(35) "LISTER.BAS":PRINT "Prints a formatted listing of a BASIC program saved with the ,A option.":PRINT "Uses IBM PC printer to produce 40, 63, 80, or 132 character listings."
  3. 30  PRINT "Set 'Width' at appropriate setting and remember margin settings must agree.     ":COLOR 7,0:LINE INPUT"Today's date: ";TODAY$:L.MGN=5:R.MGN=72:B.MGN=8:LN.SPA=1:PG.LEN=66:PG.WID=80:DBL.WID=20:FLNM$="":HEADER$="":INDENT$=SPACE$(8)
  4. 40  ON ERROR GOTO 510
  5. 50  LPRINT CHR$(24);CHR$(127);CHR$(18);:WIDTH "lpt1:",80:ON ERROR GOTO 0:KEY 1,"Lt margin at :":KEY 2,"Rt margin at :":KEY 3,"Bottom blanks:":KEY 4,"Width (max'm):":KEY 5,"Single spaced"+CHR$(13):KEY 6,"Double spaced"+CHR$(13)
  6. 60  KEY 7,"P'gram name: ":KEY 8,"Header: ":KEY 9,"Review"+CHR$(13):KEY 10," Begin":KEY ON:LOCATE 23,1:ARROW$=STRING$(20,"-")
  7. 70  PRINT ARROW$;:COLOR 0,7:PRINT " Use F-keys to set the listing format ";:COLOR 7,0:PRINT ARROW$:RESTORE:FOR I=0 TO 9:READ FKEY$(I):NEXT:DATA Lt,Rt,Bo,Wi,Si,Do,P',He,Re," B":FOR IP=0 TO 20:READ Z$:IF Z$<>"END" THEN PREFER$(IP)=Z$:NEXT IP
  8. 80  IP=IP-1:DATA " ELSE "," THEN ",": "," PRINT":DATA " IF "," '"," OR "," AND ",";"
  9. 90  DATA "="," ","+","*",",", END
  10. 100  LINE INPUT Z$:FOR I=0 TO 9:IF LEFT$(Z$,2)=FKEY$(I) GOTO 110 ELSE NEXT :GOTO 100
  11. 110  ON I+1 GOTO 120,130,140,220,160,170,180,150,280,320
  12. 120  GOSUB 530:L.MGN=NUMBA:GOTO 100
  13. 130  GOSUB 530:R.MGN=NUMBA:GOTO 100
  14. 140  GOSUB 530:B.MGN=NUMBA:GOTO 100
  15. 150  HEADER$=MID$(Z$,9):GOTO 100
  16. 160  LN.SPA=1:GOTO 100
  17. 170  LN.SPA=2:GOTO 100
  18. 180  FLNM$=MID$(Z$,13)
  19. 190  IF LEFT$(FLNM$,1)=" " THEN FLNM$=MID$(FLNM$,2):GOTO 190
  20. 200  IF HEADER$="" THEN HEADER$=CHR$(34)+FLNM$+CHR$(34)
  21. 210  GOTO 100
  22. 220  GOSUB 530:IF NUMBA>132 THEN PRINT "Maximum page width is limited 132 characters":GOTO 100
  23. 230  IF NUMBA>80 AND NUMBA<133 THEN LPRINT CHR$(20);CHR$(15);:WIDTH "lpt1:",132 ELSE WIDTH "lpt1:",80
  24. 240  IF NUMBA>66 AND NUMBA<81 THEN LPRINT CHR$(18);CHR$(20);
  25. 250  DBL.WID=20:IF NUMBA>40 AND NUMBA<67 THEN LPRINT CHR$(15);:DBL.WID=14
  26. 260  IF NUMBA<41 THEN LPRINT CHR$(18);:DBL.WID=14
  27. 270  PG.WID=NUMBA:GOTO 100
  28. 280  PRINT :PRINT "Left margin at";L.MGN:PRINT "Right margin at";R.MGN:PRINT MID$(STR$(B.MGN),2);" blank lines at page bottom":PRINT "Maximum page width is";PG.WID:IF LN.SPA=2 THEN PRINT "Double";ELSE PRINT "Single";
  29. 290  PRINT " line spacing":PRINT "Program name: ";:IF FLNM$="" THEN GOSUB 550 ELSE PRINT FLNM$
  30. 300  PRINT "Header: ";:IF HEADER$="" THEN GOSUB 550 ELSE PRINT HEADER$
  31. 310  PRINT:GOTO 100
  32. 320  LN.LEN=R.MGN-L.MGN+1:IF L.MGN<1 OR L.MGN>R.MGN-20 OR R.MGN<L.MGN+20 OR R.MGN>PG.WID-2 OR B.MGN<5 OR PG.WID<LN.LEN OR LEN(HEADER$)>LN.LEN-10 THEN BEEP:PRINT "CAN'T BEGIN. CHECK THE MARGIN & WIDTH SPECIFICATIONS or LENGTH OF HEADER":GOTO 70
  33. 330  FLNM$=FLNM$:ON ERROR GOTO 520
  34. 340  OPEN FLNM$ FOR INPUT AS #1:ON ERROR GOTO 0:LPRINT:LPRINT CHR$(DBL.WID);TAB(L.MGN);HEADER$;:IF TODAY$="" THEN LPRINT ELSE LPRINT ", listed ";TODAY$
  35. 350  LPRINT:LPRINT:HEADER$=SPACE$(LN.LEN-LEN(HEADER$)-10)+HEADER$:PG.NUM=1:LN.CNT=4
  36. 360  IF EOF(1) GOTO 560
  37. 370  LINE INPUT #1,TAPE$:IF TAPE$="" GOTO 370
  38. 380  TAPE$=SPACE$(6-INSTR(TAPE$," "))+TAPE$:LOCATE 24,1:PRINT "LINE ";LEFT$(TAPE$,6);:IF MID$(TAPE$,7,1)<>"'" THEN CMNT.SW=0
  39. 390  FOR J=0 TO 9:IF CMNT.SW=0 AND MID$(TAPE$,7,1)="'" THEN LN$(J)="":J=J+1:CMNT.SW=1
  40. 400  IF LEN(TAPE$)<=LN.LEN THEN LN$(J)=TAPE$:GOTO 470
  41. 410  FOR K=0 TO IP:SITE=0:K$=PREFER$(K)
  42. 420  HI.SITE=SITE:IF SITE<9 THEN SITE=9
  43. 430  SITE=INSTR(SITE+1,TAPE$,K$):IF SITE>0 AND SITE<=LN.LEN GOTO 420
  44. 440  IF HI.SITE=0 THEN NEXT K
  45. 450  IF HI.SITE=0 THEN HI.SITE=LN.LEN
  46. 460  LN$(J)=LEFT$(TAPE$,HI.SITE):TAPE$=MID$(TAPE$,HI.SITE+1):TAPE$=INDENT$+TAPE$:NEXT J
  47. 470  IF LN.CNT<PG.LEN-B.MGN-LN.SPA*(J+1) GOTO 490
  48. 480  PG.NUM=PG.NUM+1:LPRINT CHR$(12):LPRINT CHR$(DBL.WID);TAB(L.MGN);HEADER$;", page";PG.NUM:LPRINT:LPRINT:LN.CNT=4
  49. 490  FOR L=0 TO J:LPRINT CHR$(DBL.WID);TAB(L.MGN);LN$(L):IF LN.SPA=2 THEN LPRINT
  50. 500  NEXT L:LN.CNT=LN.CNT+(J+1)*LN.SPA:GOTO 360
  51. 510  PRINT :BEEP:PRINT "The line printer isn't ready. Check it....":PRINT:RESUME 50
  52. 520  CLOSE:PRINT :BEEP:PRINT "Problem with disk. Check it....":RESUME 340
  53. 530  NUMBA=VAL(MID$(Z$,15)):IF NUMBA=0 THEN BEEP:PRINT "<< NUMBER REQUIRED >>"
  54. 540  RETURN
  55. 550  COLOR 0,7:PRINT "  NONE SPECIFIED  ";:COLOR 7,0:PRINT :RETURN
  56. 560  LPRINT CHR$(18);CHR$(20);CHR$(12):WIDTH "lpt1:",80:BEEP:CLOSE:KEY OFF:KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13):KEY 3,"LOAD"+CHR$(34):KEY 4,"SAVE"+CHR$(34):KEY 5,"EDIT ":KEY 6,CHR$(34)+",A"
  57. 570  KEY 7,"LPRINT"+CHR$(13):KEY 8,"CLS"+CHR$(13):KEY 9,"FILES "+CHR$(34)+"B:*.*"+CHR$(13):KEY 10,"SCREEN 0,0,0"+CHR$(13):KEY ON:END
  58.